package com.model.strategy;

import java.util.Objects;

/**
 * 策略模式包含三部分内容
 * 1. 一个代表某个算法的接口（策略模式接口）
 * 2. 一个或多个该接口的具体实现（多种算法实现）
 * 3. 一个或多个使用策略对象的客户
 *
 * @author: wyl
 * @date: 2021/11/2
 */
public class Validator {

    private final ValidationStrategy strategy;

    public Validator(ValidationStrategy strategy) {
        this.strategy = strategy;
    }

    public boolean validate(String s) {
        return strategy.execute(s);
    }

    public static void main(String[] args) {
        Validator validator1 = new Validator(s -> Objects.equals("111", s));
        System.out.println("validator1.validate(\"111\") = " + validator1.validate("111"));

        Validator validator2 = new Validator(s -> Objects.equals("222", s));
        System.out.println(validator2.validate("111"));
    }


    /**
     * 策略模式接口-函数式接口
     */
    interface ValidationStrategy {
        boolean execute(String s);
    }
}
